#include "CameraFormatUtils.hpp"
#include <stdexcept>

namespace CameraFormatUtils {

const std::unordered_map<std::string, uint32_t> formatMap = {
    {"test_yuv420", 0},
    {"test_jpeg", 2},
    {"test_h264", 1},
    {"YUYV", V4L2_PIX_FMT_YUYV},
    {"JPEG", V4L2_PIX_FMT_JPEG},
    {"H264", V4L2_PIX_FMT_H264},
    {"NV12", V4L2_PIX_FMT_NV12},
    {"NV21", V4L2_PIX_FMT_NV21},
    {"NV16", V4L2_PIX_FMT_NV16},
    {"NV61", V4L2_PIX_FMT_NV61},
    {"NV24", V4L2_PIX_FMT_NV24},
    {"NV42", V4L2_PIX_FMT_NV42},
    {"NV12M", V4L2_PIX_FMT_NV12M},
    {"NV21M", V4L2_PIX_FMT_NV21M},
    {"NV16M", V4L2_PIX_FMT_NV16M},
    {"NV61M", V4L2_PIX_FMT_NV61M},
    {"YUV410", V4L2_PIX_FMT_YUV410},
    {"YVU410", V4L2_PIX_FMT_YVU410},
    {"YUV420", V4L2_PIX_FMT_YUV420},
    {"YVU420", V4L2_PIX_FMT_YVU420},
    {"YUV422P", V4L2_PIX_FMT_YUV422P}
    // 添加其他需要的格式...
};

bool stringToFormat(const std::string &formatStr, uint32_t &outFormat) {
    auto it = formatMap.find(formatStr);
    if (it != formatMap.end()) {
        outFormat = it->second;
        return true;
    }
    return false;
}

bool formatToString(uint32_t format, std::string &outFormatStr) {
    for (const auto &pair : formatMap) {
        if (pair.second == format) {
            outFormatStr = pair.first;
            return true;
        }
    }
    return false;
}
} // namespace CameraFormatUtils